package net.oschina.app.base;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import net.oschina.app.R;
import net.oschina.app.adapter.BaseVPAdapter;
import net.oschina.app.fragment.DefaultFragment;

import butterknife.BindView;
import butterknife.ButterKnife;

//所有滑块界面片段的基类

/*1. 滑动界面实现步骤
        * 1. 初始化布局, 将包含页面滑动标签(PageSlidngTabStrip\TabLayout),ViewPager的布局初始化
        LayoutInflate
        （TabLayout\PageSlidngTabStrip)+ViewPager+Fragment
        * 2. 查找关心的控件
        TabLayout
        ViewPager
        * 3. 创建数据适配器   PagerAdapter
        FragmentPagerAdapter--> FragmentStatePagerAdapter
        * 4. 初始化页签信息
        : 标签标题   标签所对应的Fragment   传递给Fragment的参数
        * 5. 将数据适配器设置给ViewPager
        * 6. 页签布局(TabLayout)要和ViewPager要绑定/关联*/
public abstract class BaseVPFragment extends BaseFragment {
    @BindView(R.id.tab_layout)
    TabLayout mTabLayout;
    @BindView(R.id.vp_pager)
    ViewPager mViewPager;
    private Context context;
    private BaseVPAdapter mAdapter;

    //1.初始化片段
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getContext();
    }

    //2. 初始化片段的界面，返回的是片段的根节点视图
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

       /*************************与界面UI相关的操作 ************************/
        //1. 初始化布局, 将包含页面滑动标签(PageSlidngTabStrip\TabLayout),ViewPager的布局初始化
        View view = View.inflate(context, R.layout.fragment_news_vp, null);
        //2. 绑定控件，查找关心的控件
        ButterKnife.bind(this, view);
        //3. 创建数据适配器   PagerAdapter
        mAdapter = new BaseVPAdapter(getChildFragmentManager(),context);

        //4. 将数据适配器设置给ViewPager
        mViewPager.setAdapter(mAdapter);

        //5. 页签布局(TabLayout)要和ViewPager要绑定/关联
        mTabLayout.setupWithViewPager(mViewPager);



        /*************************与数据相关的操作 ************************/

        // 6.初始化页签信息,包含（标签标题   标签所对应的Fragment   传递给Fragment的参数）
        setupTab(mAdapter);

        return view;
    }
    // 初始化页签信息,包含（标签标题   标签所对应的Fragment   传递给Fragment的参数）
/*    private void setupTab() {
        mAdapter.clear();//先清除适配器集合中的数据，再添加
        mAdapter.addTab("资讯2",DefaultFragment.class,getBundle("资讯2内容"));
        mAdapter.addTab("热点2",DefaultFragment.class,getBundle("热点2内容"));
        mAdapter.addTab("博客2",DefaultFragment.class,getBundle("博客2内容"));
        mAdapter.addTab("推荐2",DefaultFragment.class,getBundle("推荐2内容"));
    }*/

    //初始化页签信息,包含（标签标题   标签所对应的Fragment   传递给Fragment的参数）.
    //由于基类（f父类）不能决定子类有哪些页签及关联哪些片段等， 所以抽象出去，由子类来实现
    protected abstract void setupTab(BaseVPAdapter adapter);


    //取得bundle对象
    public Bundle getBundle(String info) {
        Bundle bundle=new Bundle();
        bundle.putString("key",info);
        return  bundle;
    }


}
